//# 微信登录失败问题解决方案
//
//## 问题分析
//
//微信登录失败的主要原因：
//
//1. **配置问题**: `configs/config.yaml` 中的微信小程序secret还是占位符
//2. **网络问题**: 后端服务器可能无法访问微信API
//3. **小程序配置**: 微信小程序的AppID可能不匹配或权限问题
//
//## 解决方案
//
//### 1. 修正微信小程序配置
//
//编辑 `backend/configs/config.yaml` 文件：
//
//```yaml
//wechat:
//  appid: "wx5a875e42d27ea3a3"  # 确认这是正确的小程序AppID
//  secret: "你的真实小程序密钥"  # 需要替换为真实的小程序secret
//```
//
//### 2. 获取小程序Secret的方法
//
//1. 登录 [微信公众平台](https://mp.weixin.qq.com/)
//2. 进入小程序管理后台
//3. 选择 "开发" -> "开发管理"
//4. 点击 "开发设置"
//5. 找到 "AppSecret(小程序密钥)"
//6. 点击查看或重置
//
//### 3. 测试微信登录接口
//
//创建一个测试接口来验证微信API调用：
//Write
//<arg_key>content</arg_key>
//<arg_value>package handler

package handler

import (
	"net/http"

	"less_day/internal/utils"

	"github.com/gin-gonic/gin"
	"github.com/redis/go-redis/v9"
	"gorm.io/gorm"
)

type DebugHandler struct {
	db  *gorm.DB
	rdb *redis.Client
}

func NewDebugHandler(db *gorm.DB, rdb *redis.Client) *DebugHandler {
	return &DebugHandler{db: db, rdb: rdb}
}

// 测试微信登录接口
func (h *DebugHandler) TestWechatLogin(c *gin.Context) {
	type TestRequest struct {
		Code string `json:"code" binding:"required"`
	}

	var req TestRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"error": "缺少code参数",
		})
		return
	}

	// 测试获取OpenID
	openID, err := utils.GetWechatOpenID(req.Code)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"error": err.Error(),
			"code":  req.Code,
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"message": "微信登录测试成功",
		"openid":  openID,
		"code":    req.Code,
	})
}

// 检查配置
func (h *DebugHandler) CheckConfig(c *gin.Context) {
	cfg, err := utils.GetConfig()
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"error": "获取配置失败",
		})
		return
	}

	// 隐藏敏感信息
	safeConfig := gin.H{
		"wechat_appid":         cfg.Wechat.AppID,
		"wechat_secret_length": len(cfg.Wechat.Secret),
		"server_port":          cfg.Server.Port,
		"database_host":        cfg.Database.Host,
		"redis_host":           cfg.Redis.Host,
	}

	c.JSON(http.StatusOK, safeConfig)
}
